pause container
개요
공식 문서에서는 등장하지 않지만, 파드의 구조와 원리를 찾아보면 이 컨테이너의 존재가 왕왕 나오곤 한다.
이 컨테이너는 파드 내의 컨테이너들이 생성되기 이전, 가장 먼저 생성되어 무한히 대기하는 컨테이너이다.
존재 이유는 파드 내 공유할 자원들이 휘발되지 않도록 격리된 공간을 지켜주는 것.
기능
파드 내에서 공유되는 것
컨테이너는 namespace를 격리시키는 기술이라고 이야기했다.
그리고 파드는 컨테이너를 관리하는 최소 단위 객체이다.
그럼 파드 내의 컨테이너들은 각각 네임스페이스가 분리되어 있는가?
그렇지 않다.
파드 내의 컨테이너들은 기본적으로 UTS, IPC, NET 네임스페이스를 공유한다.
달리 말해 호스트이름과 프로세스 통신, 네트워크를 공유한다는 말이다.
추가적인 설정을 통해 PID 네임스페이스도 공유 가능하다고 한다.
이것들을 공유할 수 있도록, 해당 자원들을 붙잡아두는 역할을 하는 것이 바로 pause container인 것이다.
다음의 두 가지 장점을 가진다.
- 멀티 컨테이너 환경에서 두 컨테이너가 같은 자원을 공유할 수 있도록 만든다.
- 앱 컨테이너가 종료됐다가 다시 생성되더라도 같은 자원을 사용할 수 있도록 만든다.
동작
pause 컨테이너야 말로 명실상부하게 파드의 생애주기를 함께 하는 컨테이너이다.
얘는 그냥 모든 컨테이너들의 부모격으로 만들어져서, 각종 네임스페이스를 공유해주는 역할을 한다.
추가적으로 파드 내 컨테이너들에 이상이 생겼을 때는 좀비 프로세스를 죽이는 역할도 수행해준다.
확인
이왕이면 눈으로 확인해보면 좋지 않을까 싶지만, 일반적인 방법으로는 확인이 되지 않도록 은닉되어 있다.
그냥 ps 명령어를 쳐보면 그나마 확인할 수 있다.
docker 런타임이면 도커로도 확인할 수 있다는데, 나는 Containerd라서 확인이 어려운 게 아닌가 한다.